| commit | 313381ab20b5918de1b26e8b91e815d635e3c8fc | [log] [tgz] |
|---|---|---|
| author | James Farrell <jamesfarrell@google.com> | Tue Aug 06 16:56:12 2024 +0000 |
| committer | James Farrell <jamesfarrell@google.com> | Tue Aug 06 16:56:12 2024 +0000 |
| tree | 703351da3aff6aa410f16aa4e668369da40c9485 | |
| parent | a9366dc763025fae57485e38367258711f12258d [diff] |
Update Android.bp by running cargo_embargo Test: ran cargo_embargo Change-Id: I841c84698dfba200cc5eec005b1000082ad67420
Rust crate for a convenient RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic).
The defer! macro and guard are no_std compatible (require only core), but the on unwinding / not on unwinding strategies require linking to std. By default, the use_std crate feature is enabled. Disable the default features for no_std support.
Please read the API documentation here.
Minimum supported Rust version: 1.20
#[macro_use(defer)] extern crate scopeguard; use scopeguard::guard; fn f() { defer! { println!("Called at return or panic"); } panic!(); } use std::fs::File; use std::io::Write; fn g() { let f = File::create("newfile.txt").unwrap(); let mut file = guard(f, |f| { // write file at return or panic let _ = f.sync_all(); }); // access the file through the scope guard itself file.write_all(b"test me\n").unwrap(); }
1.2.0
1.1.0
defer!, defer_on_success! and defer_on_unwind!) to accept statements. (by @konsumlamm)1.0.0
Change the closure type from FnMut(&mut T) to FnOnce(T): Passing the inner value by value instead of a mutable reference is a breaking change, but allows the guard closure to consume it. (by @tormol)
Add defer_on_success!, guard_on_success() and OnSuccess strategy, which triggers when scope is exited without panic. It's the opposite to defer_on_unwind! / guard_on_unwind() / OnUnwind.
Add ScopeGuard::into_inner(), which “defuses” the guard and returns the guarded value. (by @tormol)
Implement Sync for guards with non-Sync closures.
Require Rust 1.20
0.3.3
#[inline] on a few more functions by @stjepang (#14)0.3.2
0.3.1
defer_on_unwind!, Strategy traitGuard → ScopeGuardScopeGuard::with_strategy.ScopeGuard now implements Debug.0.2.0
no_std unconditionally0.1.2
defer!